还记得我们创建 AnimationController 时传递了一个 vsync 参数么,它是一个 TickerProvider 对象,其主要职责是创建一个 Ticker,Flutter应用在启动时都会绑定一个 SchedulerBinding,通过 SchedulerBinding 可以给每一次屏幕刷新添加回调,而 Ticker 就是通过 SchedulerBinding 来添加屏幕刷新回调,这样一来,每次屏幕刷新都会调用 TickerCallback。使用 Ticker 来驱动动画会防止屏幕外动画(动画的UI不在当前屏幕时,如锁屏时)消耗不必要的资源,因为 Flutter 中屏幕刷新时会通知到绑定的 SchedulerBinding,而 Ticker 是受 SchedulerBinding 驱动的,由于锁屏后屏幕会停止刷新,所以 Ticker 就不会再触发。

Flutter 允许我们将一个 State 设置为一个 Ticker,只需要包含 TickerProviderStateMixin 即可:

class AnimationRouteState extends State<AnimationRoute>
    with TickerProviderStateMixin {
    //......
}

results matching ""

    No results matching ""